Web Server (Web 服务器) 开发通常是指 Web 后端服务开发。

除了直接利用 Node.js 内置的 http 开发外,还可以使用社区中已经封装好的 Node.js 开发框架,来提高开发效率。

1 一些流行的开发框架

下面是业界里较出名的一些 Node.js 框架。

国外: * NestJS:用于构建高效、可扩展的 Node.js 服务器端应用程序的开发框架; * Express:高度包容、快速而极简的 Node.js Web 框架; * Koa:基于 Node.js 平台的下一代 web 开发框架; * fastify:快速并且低开销的 web 框架,专为 Node.js 平台量身打造。

国内 (都是阿里出品): * Egg:Egg.js 为企业级框架和应用而生; * Midway:Node.js 框架,通过自研的依赖注入容器,搭配各种上层模块,组合出适用于不同场景的解决方案。

其它当下还比较小众的: * hono:小巧、简单且超快的 Web 框架,支持在任何 JS 运行时上运行; * Deepkit:高性能 TypeScript 框架,适用于企业级 TypeScript 应用程序开发。

其中 NestJS, Egg, Midway 都是非常适合开发大型项目的,内置了许多开箱即用的能力和解决方案。

其它的框架都是比较轻量级的,适合个人/小团队开发小型项目,利用社区生态中提供的丰富功能插件完成应用开发。

接下来再简单介绍一下 HTTP基础知识RESTful API,就开始使用 express 实践开发一个简单的 Web Server 实现资源的 CRUD 操作。

2 HTTP 介绍

超文本传输协议 (HyperText Transfer Protocol))。

在 Web 应用网络通信中,最常用的网络协议。

这里简单介绍一下 HTTP 中的 请求方法URL 相关知识,更多细节可移步 MDN 文档:HTTP

2.1 请求方法

请求方法分为很多种,但最常用的也就是 GetPost

虽然请求方法有很多,但是更多的是传达一个语义,而不是说 Post 能做的事情 Get 就不能做了。

下面是简单的介绍 (主要关注前 5 个就行)。 | 方法 | 常用场景 | | ------- | ---------------------------------------------------------------------------- | | GET | 用于获取资源,如网页、图片等数据。GET 请求通常不会对服务器资源进行修改 | | POST | 用于向服务器提交数据,通常会对服务器进行修改。常用于表单提交、注册、登录场景 | | PUT | 更新服务器上的资源。通常用于更新或替换已有的资源 | | DELETE | 通常用于删除服务器上的资源 | | OPTIONS | 用于获取与资源相关的选项,如允许的请求方法、代理等。通常用于跨域请求的预检 | | PATCH | 用于对资源进行局部修改。常用于更新资源的部分属性 | | HEAD | 类似于 GET 请求,但不返回响应体。常用于检查资源的元数据,如长度、类型等。 | | CONNECT | 用于建立一个 TCP/IP 隧道到另一个服务器,如 WebSocket 场景。 | | TRACE | 用于调试信息。通常用于开发和测试场景。 |

2.2 URL 构成

sh scheme://host:port/path?query | 名称 | 含义 | | ------ | -------------------------------- | | scheme | 协议(HTTP/HTTPS/FTP..) | | host | 主机名(通常说的域名或ip) | | port | 端口号(默认HTTP 80,HTTPS 443) | | path | 资源路径(例如 /hello) | | query | 用于查询的参数 (?id=1) |

3 RESTful API 介绍

在当下的 Web 开发中,REST (Representational State Transfer) 架构风格被广泛采用。

RESTful API 是一个基于 REST 架构风格构建的 Web 服务。

它对数据的操作分别使用 HTTP 协议提供的 GET (获取数据)、POST (添加数据)、PUT (更新数据)、DELETE (删除数据) 等方法来表示。

同时还可以配合路由传参,来编写更加语义化的 API。

下面是一组例子。

| 方法 | 路径 | 描述 | | ------ | -------------- | -------------------------------------------------- | | GET | /api/users | 获取所有用户信息 | | GET | /api/users/:id | 根据用户ID获取用户信息 | | POST | /api/users | 创建新用户,请求体包含新用户的信息 | | PUT | /api/users/:id | 根据用户ID更新用户信息,请求体包含更新后的用户信息 | | DELETE | /api/users/:id | 根据用户ID删除用户信息 |

接下来我们将使用 express 来实现一个简单的 Web Server,同时实现上面的这组 API

小结

本节介绍了 Web Server 开发相关的一些理论知识,包括 HTTP 基础知识、RESTful API 等。

同时也简单介绍了一些国内外流行的 Node.js Web 框架,其中 NestJS, Egg, Midway 等是最适合开发大型项目的,Express,Koa 适合中小型项目。